/**
 * 未知的三个数，给定大小的约束关系，问是否有矛盾
 * 注意到三个数只有四种大小关系：
 *  小中大、小小大，小大大、小小小
 * 排列的话最多有6种，因此一共有24种可能
 * 这24种可能中只要有一种符合给定的约束，即可
 * 都没有说明给定的约束有矛盾
 */
#include <bits/stdc++.h>
using namespace std;

struct _t{
    int a;
    int b;
    int c;
};
vector<_t> Cond;

int N;
vector<int> Idx;

bool isok(){
    for(const auto & i : Cond){
        int a = Idx[i.a];
        int b = Idx[i.b];
        if(i.c == 1){
            if(a < b) ;
            else return false;
        }else{
            if(a >= b) ;
            else return false;
        }
    }
    return true;
}

bool proc(){
    Idx = {0, 1, 2, 3};
    do{
        if(isok()) return true;
    }while(next_permutation(Idx.begin() + 1, Idx.end()));

    Idx = {0, 1, 1, 2};
    do{
        if(isok()) return true;
    }while(next_permutation(Idx.begin() + 1, Idx.end()));

    Idx = {0, 1, 2, 2};
    do{
        if(isok()) return true;
    }while(next_permutation(Idx.begin() + 1, Idx.end()));

    Idx = {0, 1, 1, 1};
    do{
        if(isok()) return true;
    }while(next_permutation(Idx.begin() + 1, Idx.end()));

    return false;
}

int main(){
#ifndef ONLINE_JUDGE
    freopen("z.txt", "r", stdin);
#endif
    ios::sync_with_stdio(false);cin.tie(nullptr);cout.tie(0);
    int nofkase = 1;
    cin >> nofkase;
    while(nofkase--){
        cin >> N;
        Cond.assign(N, {});
        for(auto & i : Cond) cin >> i.a >> i.b >> i.c;
        cout << (proc() ? "Yes\n" : "No\n");
    }
    return 0;
}